package com.ruoyi.system.service;

import java.util.List;
import com.ruoyi.system.domain.CommunityPost;
import com.ruoyi.system.domain.CommunityComment;
import com.ruoyi.system.domain.CommunityLike;

/**
 * 社区服务接口
 * 
 * @author ruoyi
 */
public interface ICommunityService {
    /**
     * 查询帖子列表
     * 
     * @param post 帖子信息
     * @return 帖子集合
     */
    List<CommunityPost> selectPostList(CommunityPost post);

    /**
     * 查询帖子信息
     * 
     * @param postId 帖子ID
     * @return 帖子信息
     */
    CommunityPost selectPostById(Long postId);

    /**
     * 新增帖子
     * 
     * @param post 帖子信息
     * @return 结果
     */
    int insertPost(CommunityPost post);

    /**
     * 修改帖子
     * 
     * @param post 帖子信息
     * @return 结果
     */
    int updatePost(CommunityPost post);

    /**
     * 删除帖子信息
     * 
     * @param postId 帖子ID
     * @return 结果
     */
    int deletePostById(Long postId);

    /**
     * 批量删除帖子信息
     * 
     * @param postIds 需要删除的帖子ID数组
     * @return 结果
     */
    int deletePostByIds(Long[] postIds);

    /**
     * 查询评论列表
     * 
     * @param postId 帖子ID
     * @param userId 用户ID (用于判断是否点赞)
     * @return 评论集合（包含所有评论和回复的树形结构）
     */
    List<CommunityComment> selectCommentList(Long postId, Long userId);

    /**
     * 查询评论信息
     * 
     * @param commentId 评论ID
     * @return 评论信息
     */
    CommunityComment selectCommentById(Long commentId);

    /**
     * 新增评论
     * 
     * @param comment 评论信息
     * @return 结果
     */
    int insertComment(CommunityComment comment);

    /**
     * 修改评论
     * 
     * @param comment 评论信息
     * @return 结果
     */
    int updateComment(CommunityComment comment);

    /**
     * 删除评论信息
     * 
     * @param commentId 评论ID
     * @return 结果
     */
    int deleteCommentById(Long commentId);

    /**
     * 批量删除评论信息
     * 
     * @param commentIds 需要删除的评论ID数组
     * @return 结果
     */
    int deleteCommentByIds(Long[] commentIds);

    /**
     * 查询用户点赞过的帖子列表
     * 
     * @param userId 用户ID
     * @param post 帖子信息 (用于分页或其他筛选)
     * @return 帖子集合
     */
    List<CommunityPost> selectLikedPostList(Long userId, CommunityPost post);

    /**
     * 查询用户是否点赞
     * 
     * @param userId 用户ID
     * @param targetId 目标ID
     * @param type 类型（1帖子 2评论）
     * @return 点赞信息
     */
    CommunityLike selectLikeByUserAndTarget(Long userId, Long targetId, String type);

    /**
     * 新增点赞
     * 
     * @param like 点赞信息
     * @return 结果
     */
    int insertLike(CommunityLike like);

    /**
     * 删除点赞信息
     * 
     * @param likeId 点赞ID
     * @return 结果
     */
    int deleteLikeById(Long likeId);

    /**
     * 更新帖子点赞数
     * 
     * @param postId 帖子ID
     * @param count 数量
     * @return 结果
     */
    int updatePostLikes(Long postId, Integer count);

    /**
     * 更新帖子评论数
     * 
     * @param postId 帖子ID
     * @param count 数量
     * @return 结果
     */
    int updatePostComments(Long postId, Integer count);

    /**
     * 更新评论点赞数
     * 
     * @param commentId 评论ID
     * @param count 数量
     * @return 结果
     */
    int updateCommentLikes(Long commentId, Integer count);

    /**
     * 查询用户评论过的帖子列表
     * 
     * @param userId 用户ID
     * @param post 帖子信息 (用于分页或其他筛选)
     * @return 帖子集合
     */
    List<CommunityPost> selectCommentedPostList(Long userId, CommunityPost post);

    /**
     * 点赞或取消点赞
     * 
     * @param type 类型（1帖子 2评论）
     * @param id 目标ID
     * @return 结果（1点赞成功 0取消点赞）
     */
    public int like(String type, Long id);

    /**
     * 查询点赞列表
     * 
     * @param like 点赞信息
     * @return 点赞列表
     */
    public List<CommunityLike> selectLikeList(CommunityLike like);

    /**
     * 查询所有评论列表
     * 
     * @param comment 评论信息
     * @return 评论集合
     */
    List<CommunityComment> selectAllCommentList(CommunityComment comment);
} 